
#pragma once

//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------

//вернет true если мембер доступен, иначе - false
#define is_available(class_name, member_type, member_name)         \
    has_##member_name<class_name, member_type>::eIS_AVAILABLE

//вернет true если доступна не константная версия функции-члена
#define is_available_method(class_name, member_type, member_name)  \
    has_##member_name<class_name, member_type>::eIS_NOCONST

//вернет true если доступна константная версия функции-члена
#define is_available_cmethod(class_name, member_type, member_name) \
    has_##member_name<class_name, member_type>::eIS_CONST

//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------

//вернет true если мембер доступен и является данными
#define available_data(class_name, member_type, member_name)     \
    has_by_name_##member_name<class_name, member_type>::eDATA 

//вернет true если можно запустить метод по указанному протоколу, через неконстантное имя
#define can_launch_method(class_name, member_type, member_name)  \
    has_by_name_##member_name<class_name, member_type>::eMETHOD

//вернет true если можно запустить метод по указанному протоколу, через константное имя
#define can_launch_cmethod(class_name, member_type, member_name) \
    has_by_name_##member_name<class_name, member_type>::eCMETHOD

//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------


















#ifdef _MSC_VER
    #if _MSC_VER <= 1700
        #include "sfinae/sfinae_mvs.h"
        #include "sfinae/can_launch.h"
    #else
        #include "sfinae/sfinae_cpp11.h"
        #include "sfinae/can_launch.h"
    #endif
#else
    #include "sfinae/sfinae_cpp11.h"
    #include "sfinae/can_launch.h"
#endif


